home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Light ROM 1
/
LIGHT-ROM 1 (Amiga Library Services)(1994).iso
/
ffdisks
/
d931.lha
/
Modules
/
IntuitionSupport
/
IntuitionSupport.def
/
IntuitionSupport.def
Wrap
Text File
|
1993-12-20
|
56KB
|
1,285 lines
DEFINITION MODULE IntuitionSupport;
(* Version 1.1 *)
(* Diese Routinen unterstützen die Programmierung der Intuitionlibrary. *)
(* Es werden die Behandlung von Screens, Windows, Images, Borders, *)
(* IntuiTexts, Menus, Gadgets und Requester unterstützt. *)
(* Die Files IntuitionSupport.obj und IntuitionSupport.sym sind *)
(* Copyright-frei. Sie dürfen auch in kommerziellen Produkten benutzt *)
(* werden. Diese Files dürfen allerdings nur mit den Sourcecodes und *)
(* dem Demo weitergegeben werden. *)
(* Jeder Art Änderungen am Sourcecode oder am Definitionsfile ohne *)
(* meine ausdrückliche Genehmigung sind verboten. Das Definitionsfile *)
(* und der Sourcecode, sowie Teile daraus, sind Copyrightgeschützt! *)
(* © 1991 by Andre Wiethoff *)
(* *)
(* Bei Verbesserungsvorschlägen, Fehlern oder bei Fragen: *)
(* Andre Wiethoff *)
(* Höhenweg 2 *)
(* D-57392 Schmallenberg / Germany *)
FROM SYSTEM IMPORT LONGSET,ADDRESS;
FROM IntuitionD IMPORT WindowPtr,MenuPtr,MenuItemPtr,RequesterPtr,Gadget,
GadgetPtr,BoolInfo,PropInfo,StringInfo,ScreenFlagSet,
ScreenPtr,IDCMPFlags,WindowFlagSet,ImagePtr,
IntuiTextPtr,IntuiMessage,IDCMPFlagSet;
FROM GraphicsD IMPORT DrawModeSet,TextAttr,TextAttrPtr,TextFontPtr,
ViewModeSet,RastPortPtr,FontStyleSet,BitMapPtr;
FROM FileSystem IMPORT File;
FROM KeyMapD IMPORT KeyMapPtr;
FROM RememberHeap IMPORT NewRememberPtr;
(* 'borderX' und 'borderY' können in der Borderstruktur benutzt werden *)
(* um die Eckpositionen direkt im Array ablegen zu können. z.B. kann *)
(* ein Punkt so in der Struktur abgelegt werden : b^.xy[0,borderX]:=x; *)
(* b^.xy[0,borderY]:=y; (Es wird der erste Punkt definiert) *)
CONST borderX = 0;
borderY = 1;
(* 'none' kann bei den Menufunktionen benutzt werden, um anzugegeben, *)
(* daß kein String übergeben wird. *)
none = CHR(0);
(* 'noModify' kann bei dem Befehl 'ModifyTextItem' benutzt werden um *)
(* anzuzeigen, daß keine Änderung des Selektionstextes gewünscht wird. *)
noModify = CHR(1);
(* 'noImage' kann anstatt eines Zeigers auf ein Image übergeben werden, *)
(* wenn kein Selectionsimage gewünscht ist. *)
noImage = NIL;
(* 'standart' und 'center' können bei 'SetXOffset' dazu benutzt werden *)
(* den Abstand vom linken Rand anzugeben. Bei 'standart' befindet sich *)
(* der Text so weit wie möglich links, bei 'center' in der Mitte. *)
standart = 0;
center = -1;
(* 'enabled' und 'disabled' können bei allen ...Enable-Befehlen (z.B. *)
(* MenuEnable, GadgetEnable ...) benutzt werden um anzuzeigen, ob das *)
(* jeweilige Objekt anwählbar ('enabled') oder nicht anwählbar *)
(* ('disabled') gesetzt werden soll. *)
enabled = TRUE;
disabled = FALSE;
(* 'stdFont' und 'stdHeight' können bei 'InitMenu' und 'InitGadgetList' *)
(* benutzt werden, um den Standart Topaz 8 Font bei den Menus bzw. *)
(* Gadgets zu benutzen. *)
stdFont = "topaz";
stdHeight = 8;
(* 'Made' und 'MadeSet' sind nur zur internen Benutzung freigegeben! *)
TYPE Made = (menu,item,subItem);
MadeSet = SET OF Made;
(* Das 'ItemFlagSet' enthält einige Flags die bei der Menuerstellung *)
(* benutzt werden müssen. Hier die Bedeutungen : *)
(* 'checkit' : Das jeweilige Menu(Sub)Item wird als Schalter benutzt. *)
(* Es wird auf der linken Seite etwas Platz für den *)
(* Selektionshaken freigelassen. Bei der Anwahl eines *)
(* solchen Items wird immer zwischen nicht gesetzt und *)
(* gesetzt hergeschaltet. Mittels der Funktion *)
(* 'MenuItemChecked' kann abgefragt werden ob es gesetzt *)
(* ist oder nicht. Beim Start ist es nicht gesetzt. *)
(* 'checkset' : Es gilt das gleiche wie bei 'checkit' nur ist das Item *)
(* beim Start schon gesetzt. *)
(* 'box' : Wenn der Mauspfeil über dem Item steht wird ein Rahmen *)
(* um das Item bezogen. *)
(* 'invert' : Wie bei 'box' nur wird das Feld invertiert. *)
(* 'non' : Wie bei 'box' nur passiert garnichts. *)
(* 'disable' : Das jeweilige Item ist beim Start nicht anwählbar und *)
(* kann im Laufe des Programms mittels 'MenuItemEnable' *)
(* wieder zugelassen werden. *)
ItemFlags = (checkit,checkset,box,invert,non,disable);
ItemFlagSet = SET OF ItemFlags;
(* 'MessageType' enthält die Art der empfangenen Message die bei der *)
(* Funktion 'WaitForPossibleAction' zurückgegeben wird. Wenn es sich um *)
(* eine Menuanwahl handelte, wird 'menuSelected' zurückgegeben, um sie *)
(* dann mittels 'GetMenuSelection' auszulesen. Wenn es sich um eine *)
(* Gadgetanwahl handelte wird eines der Gadgetflags zurückgegeben, um *)
(* das Ereignis mittels 'GetGadgetSelection' auszulesen. Bei *)
(* 'requesterSet' wurde ein Requester aktiviert und bei *)
(* 'requesterCleared' einer deaktiviert. Dieses ist bei DoubleMenu- *)
(* Requestern nützlich. Wenn es sich allerdings um 'otherStuff' *)
(* handelt, muß die Nachricht mittels 'GetIntuiMessage' ausgelesen und *)
(* von Hand ausgewertet werden. *)
MessageType = (menuSelected,gadgetSelected,gadgetReleased,
requesterSet,requesterCleared,otherStuff);
(* 'GadgetType' ist nur für die interne Benutzung freigegeben! *)
GadgetType = (boolean,proport,string);
(* 'BoolGadgetFlagSet' enthält einige Flags die bei der Erstellung von *)
(* Boolean-Gadgets erforderlich sind. Hier ihre Bedeutungen : *)
(* 'bgBox' : Bei Anwahl des jeweiligen Gadgets wird ein Rahmen um *)
(* es gezogen. *)
(* 'bgInversid' : Bei Anwahl des jeweiligen Gadgets wird es invertiert. *)
(* 'bgToggle' : Es handelt sich dei dem Gadget um einen Ein-Aus *)
(* Schalter, der beim Start ausgeschaltet ist. *)
(* 'bgSelected' : Es gilt das gleiche wie bei 'bgToggle', allerdings *)
(* ist es beim Start schon eingeschaltet. *)
(* 'bgDisabled' : Das Gadget ist beim Start nicht anwählbar. Erst nach *)
(* Benutzung des Befehls 'GadgetEnable' kann das Gadget *)
(* angewählt werden. *)
BoolGadgetFlags = (bgBox,bgInversid,bgToggle,bgSelected,bgDisabled);
BoolGadgetFlagSet = SET OF BoolGadgetFlags;
(* 'PropGadgetFlags' enthält einige Flags die bei der Erstellung von *)
(* Proporional-Gadgets benötigt werden. Die Bedeutungen : *)
(* 'pgDisabled' : siehe 'BoolGadgetFlagSet' - 'bgDisabled'. *)
(* 'pgBorderless' : Um das Proportionalgadget wird kein Rahmen *)
(* gezeichnet. *)
(* 'pgFollow' : Im Window wird ein Flag gesetzt, daß bei *)
(* Mausbewegungen eine Nachricht sendet wird. So kann *)
(* bei Proportionalgadgets eine Bewegung des Reglers *)
(* sofort ausgewertet werden. *)
(* 'pgInversid' : Invertiert den Reglerknopf bei der Anwahl. Wenn *)
(* dieses Flag nicht gesetzt wird, passiert nichts. *)
PropGadgetFlags = (pgDisabled,pgBorderless,pgFollow,pgInversid);
PropGadgetFlagSet = SET OF PropGadgetFlags;
(* 'StringGadgetFlagSet' enthält einige Flags die bei der Erstellung *)
(* von String-Gadgets benötigt werden. Die Bedeutungen : *)
(* 'sgLongint' : Das Gadget erwartet die Eingabe einer LONGINT-Zahl. *)
(* Bei der Abfrage des Gadgets wird die eingegebene *)
(* Zahl sofort mit übergeben. *)
(* 'sgCentered' : Das Stringgadget gibt den Text mittelzentriert aus. *)
(* 'sgRight' : Das Gadget gibt den Text rechtszentriert aus. *)
(* 'sgDisabled' : siehe 'BoolGadgetFlagSet' - 'bgDisabled'. *)
(* 'sgBox' : Normalerweise wird als Cursor das Zeichen unter dem *)
(* Cursor invertiert dargestellt, wenn aber 'sgBox' *)
(* gesetzt ist, wird das jeweilige Zeichen umrahmt. *)
StringGadgetFlags = (sgLongint,sgCentered,sgRight,sgDisabled,sgBox);
StringGadgetFlagSet = SET OF StringGadgetFlags;
(* 'RequestFlagSet' enthält einige Flags die bei der Erstellung von *)
(* von Customrequestern benötigt werden. Die Bedeutungen : *)
(* 'noisy' : Alle nicht den Requester betreffenden Nachrichten *)
(* werden abgeblockt. *)
(* 'relDMRequester' : Der Requester soll ein zur Mausposition relativer *)
(* DoubleMenu-Requester werden. (DoubleMenu bedeutet,*)
(* daß der Requester bei zweimaligen Druck auf die *)
(* Menuauswahltaste erscheint.) *)
(* 'absDMRequester' : Der Requester soll ein DMRequester werden, der *)
(* absolute Koordinaten besitzt. *)
RequestFlags = (noisy,relDMRequester,absDMRequester);
RequestFlagSet = SET OF RequestFlags;
(* 'Border' ist eine verbesserte Borderstruktur, um sofort auf ihre *)
(* Koordinaten zugreifen zu können. Allerdings bleibt es dem Benutzer *)
(* überlassen, zu prüfen, ob die Werte sich im zulässigen Bereich *)
(* befinden! Den Pointer 'BorderPtr' erhält man z.B. bei 'GetBorder' *)
(* zurück. Dort wird auch angegeben, für wieviele Koordinatenpaare *)
(* Speicher belegt werden soll. Daher dürfen nur die Elemente des 'xy' *)
(* Arrays bis zu diesen Wert benutzt werden! (Und nicht bis 255!) *)
BorderPtr = POINTER TO Border;
Border = RECORD
leftEdge : INTEGER;
topEdge : INTEGER;
frontPen : SHORTCARD;
backPen : SHORTCARD;
drawMode : DrawModeSet;
count : SHORTCARD;
xy : POINTER TO ARRAY[0..255] OF
ARRAY[borderX..borderY] OF INTEGER;
nextBorder : BorderPtr;
END;
(* 'MenuHandlePtr' wird bei einem Aufruf von 'InitMenu' übergeben und *)
(* muß bei fast allen Menüoperationen mit angegeben werden. Durch den *)
(* 'MenuHandle' ist es möglich, mehrere Menus in verschiedenen Fenstern *)
(* zur gleichen Zeit zu bearbeiten. *)
MenuHandlePtr = POINTER TO MenuHandle;
MenuHandle = RECORD
window : WindowPtr; (* public *)
main : MenuPtr;
widthCheck : INTEGER; (* private *)
widthCom : INTEGER;
made : MadeSet;
defHeight : INTEGER;
defWidthAdd : INTEGER;
defXOffset : INTEGER;
defYSpace : INTEGER;
defXSpace : INTEGER;
xItem : INTEGER;
xSubItem : INTEGER;
actMenus : INTEGER;
actItems : INTEGER;
actSubItems : INTEGER;
topItem : INTEGER;
topSub : INTEGER;
exclude : BOOLEAN;
exPauseItem : BOOLEAN;
exPauseSub : BOOLEAN;
exItem : BOOLEAN;
exSubItem : BOOLEAN;
exSetItem : LONGSET;
exSetSub : LONGSET;
defFontAttr : TextAttr;
actFontAttr : TextAttrPtr;
fontAttr : NewRememberPtr;
defFontName : POINTER TO ARRAY[0..31] OF CHAR;
defFont : TextFontPtr;
actFont : TextFontPtr;
actMenu : MenuPtr;
actItem : MenuItemPtr;
actSubItem : MenuItemPtr;
startItem : MenuItemPtr;
startSub : MenuItemPtr;
END;
(* 'GadgetHandlePtr' wird bei einem Aufruf von 'InitGadgetList' zurück- *)
(* gegeben. Dieser wird benötigt, um Gadgets in ein bestimmtes Window *)
(* einzusetzen. Es können keine Gadgets ohne diesen 'GadgetHandle' *)
(* erzeugt werden. *)
GadgetHandlePtr = POINTER TO GadgetHandle;
GadgetHandle = RECORD
window : WindowPtr; (* public *)
requester : RequesterPtr;
gadgets : NewRememberPtr; (* private *)
defFontAttr : TextAttr;
actFontAttr : TextAttrPtr;
fontAttr : NewRememberPtr;
defFontName : POINTER TO ARRAY[0..31] OF CHAR;
defFont : TextFontPtr;
actFont : TextFontPtr;
END;
(* 'Gadgets' (bzw. 'GadgetsPtr') ist eine Struktur, die bei der *)
(* Erzeugung jeder Art von Gadget benutzt wird. Der Benutzer kann *)
(* nachträglich auf alle Elemente zugreifen. Es wäre allerdings besser *)
(* die folgenden Routinen dazu benutzen um die Kompatibilität zu *)
(* bewahren und Fehlfunktionen zu vermeiden. *)
GadgetsPtr = POINTER TO Gadgets;
Gadgets = RECORD
gadget : Gadget;
handler : GadgetHandlePtr;
CASE type : GadgetType OF
|boolean :
bool : BoolInfo;
data : ADDRESS;
text : ADDRESS;
pad0 : ARRAY[0..8] OF INTEGER;
|proport :
prop : PropInfo;
xi,yi : CARDINAL;
xm,ym : CARDINAL;
pad1 : ARRAY[0..2] OF INTEGER;
ELSE
str : StringInfo;
END;
END;
(* 'CreateScreen' öffnet einen Bildschirm mit der Breite 'width' und *)
(* der Höhe 'height', sowie 'depth' Bitplanes. 'title' sollte eine *)
(* Adresse auf eine(n) String(konstante) enthalten. 'detailPen' ist *)
(* die Farbe der Schrift in der Screenleiste und 'blockPen' der der *)
(* Leiste selbst. 'type' gibt den Art des Bildschirms an. 'viewModes' *)
(* enthält die Art der Bildschirmdarstellung ('lace','hires',...). *)
(* 'defFont' zeigt, wenn gewünscht, auf einen TextAttr, der den *)
(* Standartfont für den Screen enthält. Wenn der Workbenchfont *)
(* gewünscht wird ist hier NIL einzutragen. *)
PROCEDURE CreateScreen(width,height : INTEGER;
depth : INTEGER;
title : ADDRESS;
detailPen : SHORTINT;
blockPen : SHORTINT;
type : ScreenFlagSet;
viewModes : ViewModeSet;
defFont : TextAttrPtr) : ScreenPtr;
(* 'CreateSimpleScreen' öffnet einen Screen ohne so viele Daten wie *)
(* in 'CreateScreen' angeben zu müssen. Die ersten vier Argumente *)
(* entsprechen denen aus 'CreateScreen'. 'mode' gibt den Bildschirm- *)
(* Modus an. 'mode' kann die folgenden Werte besitzen : *)
(* '1' : LoRes - NonInterlaced *)
(* '2' : HiRes - NonInterlaced *)
(* '3' : LoRes - Interlaced *)
(* '4' : HiRes - Interlaced *)
(* Diese Werte entsprechen denen aus AmigaBasics Screen-Befehl. *)
(* Der Screen wird dann als Customscreen geöffnet mit detailPen=0 und *)
(* blockPen=1 sowie dem Standartfont der Workbench. *)
PROCEDURE CreateSimpleScreen(width,height : INTEGER;
depth : INTEGER;
title : ADDRESS;
mode : INTEGER) : ScreenPtr;
(* 'DeleteScreen' löscht einen mit 'CreateScreen' oder *)
(* 'CreateSimpleScreen' erstellten Screen. *)
PROCEDURE DeleteScreen(VAR screen : ScreenPtr);
(* 'CreateWindow' öffnet ein Window mit den Koordinaten 'x','y' und *)
(* der in 'width' und 'height' angegebenen Breite und Höhe. 'minWidth' *)
(* und 'minHeight' geben bei Sizing-Windows die minimale Größe des *)
(* Fensters wieder, während 'maxWidth' und 'maxHeight' die maximale. *)
(* 'title', sowie 'detailPen' und 'blockPen' entsprechen denen aus *)
(* 'CreateScreen'. 'gadgets' geben, wenn gewünscht, eine Liste von *)
(* einzubindenen Gadgets an. Hierbei ist zu beachten, daß wenn die *)
(* Gadgets mit diesen Befehlen erstellt wurden etwas zu beachten ist. *)
(* Bei einem 'gimmeZeroZero'-Window muß das Flag 'gzzGadget' in alle *)
(* Gadgets von Hand eingebunden werden! 'idcmpFlags' geben an, auf *)
(* welche Arten von Nachrichten reagiert werden soll. 'flags' *)
(* bestimmen das Aussehen und die Funktionalität des Windows. *)
(* 'screenFlags' enthält bei eigenen Customscreens den Wert *)
(* 'customScreen', während Workbenchwindows hier 'wbenchScreen' *)
(* eintragen müssen. 'screen' ist entweder NIL für Workbenchwindows *)
(* oder für Windows auf anderen Screens gleich dem Zeiger auf die *)
(* Screenstruktur. *)
PROCEDURE CreateWindow(x,y : INTEGER;
width,height : INTEGER;
minWidth,minHeight : INTEGER;
maxWidth,maxHeight : INTEGER;
title : ADDRESS;
detailPen : SHORTINT;
blockPen : SHORTINT;
gadgets : GadgetPtr;
idcmpFlags : IDCMPFlagSet;
flags : WindowFlagSet;
screenFlags : ScreenFlagSet;
screen : ScreenPtr) : WindowPtr;
(* 'CreateSimpleWindow' öffnet ein einfacher zu startendes Window, mit *)
(* weniger Parametern. Die Parameter hier entsprechen denen aus *)
(* 'CreateWindow' vollkommen. Es wird ein Fenster geöffnet mit *)
(* detailPen=0 und blockPen=1, sowie oft benötigte IDCMPFlags. Die *)
(* minimale Windowgröße beträgt (80,40) und es gibt keine maximale *)
(* Größe des Window. *)
PROCEDURE CreateSimpleWindow(x,y : INTEGER;
width,height : INTEGER;
title : ADDRESS;
flags : WindowFlagSet;
screen : ScreenPtr) : WindowPtr;
(* 'DeleteWindow' entfernt ein mittels 'CreateWindow' oder *)
(* 'CreateSimpleWindow' geöffnetes Fenster. *)
PROCEDURE DeleteWindow(VAR window : WindowPtr);
(* 'InclIDCMPFlags' fügt dem Window auf kompatiblen Weg neue IDCMP- *)
(* Flags hinzu. *)
PROCEDURE InclIDCMPFlag(window : WindowPtr;
idcmp : IDCMPFlags);
(* 'ExclIDCMPFlags' entfernt auf kompatiblen Weg IDCMP-Flags aus dem *)
(* Window. Alle in 'idcmp' angegebenen Flags werden im Window gelöscht. *)
PROCEDURE ExclIDCMPFlag(window : WindowPtr;
idcmp : IDCMPFlags);
(* 'GetImage' schneidet aus dem angegebenen Rastport eine Grafik heraus *)
(* die sich an der Position ('x','y') befindet und die Größe 'w'*'h' *)
(* besitzt. Das Image kann kann in ein Menu oder Gadget eingebunden *)
(* werden, oder aber direkt mittels Intuitions 'DrawImage' in ein *)
(* RastPort gezeichnet werden. 'if' weist auf eine Imagestruktur, die *)
(* mit der neuen verkettet werden soll. Die neue Struktur wird hinter *)
(* (!) die 'if' Struktur gesetzt. Wenn keine Images verkettet werden *)
(* sollen, muß hier NIL angegeben werden. Ansonsten wird das Image *)
(* an die Struktur 'if' angekettet und auch 'if' zurückgegeben. *)
(* Das Image wird bei DrawImage oder ähnlichen Aufrufen auf die dazu *)
(* relativen Koordinaten 'dx' und 'dy' gesetzt. *)
PROCEDURE GetImage(rp : RastPortPtr;
x,y : INTEGER;
w,h : INTEGER;
dx,dy : INTEGER;
if : ImagePtr) : ImagePtr;
(* 'SaveImage' speichert das zu übergebene Image in ein File, das *)
(* mittels dem Modul FileSystem geöffnet worden sein muß. *)
PROCEDURE SaveImage(VAR fh : File;
image : ImagePtr);
(* 'LoadImage' lädt ein Image aus einem File, das mittels 'SaveImage' *)
(* in das jeweilige File geschrieben wurde. *)
PROCEDURE LoadImage(VAR fh : File;
if : ImagePtr) : ImagePtr;
(* 'GetColorImage' gibt ein einfarbiges Image zurück, das keinerlei *)
(* Daten für das Aussehen des Bildes verbraucht. *)
PROCEDURE GetColorImage(w,h : INTEGER;
dx,dy : INTEGER;
color : INTEGER;
if : ImagePtr) : ImagePtr;
(* 'FreeImage' gibt ein mittels 'GetImage', 'GetColorImage' oder *)
(* 'LoadImage' erzeugtes Bild an das System zurück. *)
PROCEDURE FreeImage(VAR image : ImagePtr);
(* 'FreeImageList' gibt eine verkette Liste von Images frei. Es wird *)
(* für jedes Image der Liste 'FreeImage' aufgerufen. *)
PROCEDURE FreeImageList(VAR image : ImagePtr);
(* 'GetBorder' belegt Speicher für eine Borderstruktur sowie dessen *)
(* Daten. Es wird Platz belegt für 'c' Koordinatenpaare. Um z.B. *)
(* ein Rechteck zu erzeugen, benötigt man 5 Paare (Start und Endpunkt *)
(* sollten die selben sein, damit der Rahmen geschlossen ist!). *)
(* 'fp' ist die Farbe des FrontPens und 'bp' die Farbe des BackPens. *)
(* 'bf' ist ein Zeiger auf einee Borderstruktur, mit der die neue *)
(* verkettet werden soll. Wenn keine verkettet werden sollen, muß NIL *)
(* übergeben werden. *)
PROCEDURE GetBorder(fp,bp : INTEGER;
dm : DrawModeSet;
c : SHORTCARD;
bf : BorderPtr) : BorderPtr;
(* 'SetBorderOutline' kopiert aus einer Adresse die Koordinaten des *)
(* Borders heraus. Man kann also die Borderdaten in einer ASSEMBLE *)
(* Prozedur ablegen (DC.W x,y) und sie mit diesem Befehl dem Border *)
(* zuweisen. *)
PROCEDURE SetBorderOutline(b : BorderPtr;
data : ADDRESS);
(* 'GetRectBorder' besorgt ein rechteckigen Border. Da meistens nur *)
(* rechteckige Border benutzt werden, ist diese Funktion implementiert *)
(* um einfach einen Rechtecksborder erzeugen zu können. *)
PROCEDURE GetRectBorder(fp,bp : INTEGER;
dm : DrawModeSet;
x1,y1,x2,y2 : INTEGER;
bf : BorderPtr) : BorderPtr;
(* 'NewGetRectBorder' besorgt ein (in Wirklichkeit zwei) Border- *)
(* strukturen, die im Kickstart 2.0 Look aufgebaut sind. Dabei *)
(* entspricht 'fp' die Farbe der linken, oberen Ecke und 'bp' die Farbe *)
(* der unteren, rechten Ecke. Mit 'NewGetRectBorder' beschaffte Border *)
(* müssen mittels 'FreeBorderList' freigegeben werden! *)
PROCEDURE NewGetRectBorder(fp,bp : INTEGER;
dm : DrawModeSet;
x1,y1,x2,y2 : INTEGER;
bf : BorderPtr) : BorderPtr;
(* 'FreeBorder' gibt ein mittels 'GetBorder' oder 'GetRectBorder' *)
(* belegten Border wieder an das System zurück. *)
PROCEDURE FreeBorder(VAR b : BorderPtr);
(* 'FreeBorderList' gibt eine verkettete Liste von Borders frei, die *)
(* mittels den '..Get..Border'-Befehlen belegt wurden. *)
PROCEDURE FreeBorderList(VAR b : BorderPtr);
(* 'AddIntuiText' gibt dem Benutzer ein IntuiText zurück, der mit den *)
(* übergebenen Werten gefüllt wird. 'xr' und 'yr' sind die relativen(!) *)
(* Koordinaten bei der Textausgabe. 'fp', 'bp' und 'dm' entsprechen *)
(* denen aus 'GetBorder'. 'font' zeigt, wenn gewünscht, auf einen *)
(* TextAttr der die gewünschte Schriftart enthält. Wenn die Standart- *)
(* schrift gewünscht ist, muß NIL übergeben werden. *)
(* IntuiTexts werden hier bei der Ausstattung von Requestern benötigt. *)
(* Durch Angabe eines Vorgängers des IntuiTexts kann durch Angabe *)
(* des Vorgängers in 'fit' bewirkt werden, daß diese IntuiTexte *)
(* zu einer Kette verknüpft werden. *)
PROCEDURE AddIntuiText(xr,yr : INTEGER;
fp,bp : SHORTCARD;
dm : DrawModeSet;
font : TextAttrPtr;
text : ARRAY OF CHAR;
fit : IntuiTextPtr) : IntuiTextPtr;
(* 'FreeIntuiText' gibt den mittels 'GetIntuiText' belegten Speicher *)
(* einer IntuiText-Struktur wieder frei. *)
PROCEDURE FreeIntuiText(VAR it : IntuiTextPtr);
(* 'FreeIntuiTextList' gibt eine verkette Liste von IntuiTexten frei, *)
(* die mittels dem Befehl AddIntuiText verknüpft wurden. Es wird der *)
(* Zeiger auf das erste Element erwartet. *)
PROCEDURE FreeIntuiTextList(VAR fit : IntuiTextPtr);
(* 'GetMenu' liefert die Adresse des Menus zurück mit 'menuNr' als *)
(* Nummer des Menus (von 0 beginnend). *)
PROCEDURE GetMenu(mh : MenuHandlePtr;
menuNr : INTEGER) : MenuPtr;
(* 'GetItem' liefert die Adresse der MenuItem-Struktur des Items zurück *)
(* das sich an 'itemNr' Stelle des Menus befindet. *)
PROCEDURE GetItem(menu : MenuPtr;
itemNr : INTEGER) : MenuItemPtr;
(* 'GetSubItem' arbeitet genauso wie 'GetItem' nur wird die Adresse *)
(* eines Subitems (wenn möglich) ermittelt. *)
PROCEDURE GetSubItem(menuItem : MenuItemPtr;
subItemNr : INTEGER) : MenuItemPtr;
(* 'GetMenuItem' ist eine Zusammenfassung der vorhergehenden Get...- *)
(* Befehle. Es wird gleich der Zeiger auf ein (Sub)MenuItem zurück- *)
(* gegeben, das sich an der spezifizierten Stelle befindet. Wenn ein *)
(* MenuItem gesucht ist, muß in 'subItemNr' ein -1 übergeben werden. *)
PROCEDURE GetMenuItem(mh : MenuHandlePtr;
menuNr,itemNr,subItemNr : INTEGER) : MenuItemPtr;
(* 'GetItemNumber' arbeitet genau entgegengesetzt zu 'GetMenuItem'. Es *)
(* wird zu einem gegebenen Item die Position im Menu bestimmt. Wenn *)
(* das Item kein Subitem ist, wird in 'subItemNr' eine -1 zurückgegeben.*)
PROCEDURE GetItemNumber(mh : MenuHandlePtr;
it : MenuItemPtr;
VAR menuNr,itemNr,subItemNr : INTEGER);
(* 'SetDefaultMenuFont' setzt als Schriftart den bei InitMenu ange- *)
(* gebenen Font ein, um die nächsten Items in derjenigen Schriftart *)
(* darzustellen. *)
PROCEDURE SetDefaultMenuFont(mh : MenuHandlePtr);
(* 'SetMenuFont' setzt eine neue Schriftart ein, um die nächsten Items *)
(* in dieser Schriftart darzustellen. 'font' enthält den Namen des *)
(* Fonts ohne die Endung '.font'! Wenn der Font geladen werden konnte, *)
(* wird ein TRUE zurückgegeben, ansonsten ein FALSE. Wenn die *)
(* angegebene Höhe nicht verfügbar ist, wird versucht die nächst- *)
(* liegende Größe zu öffnen. *)
PROCEDURE SetMenuFont(mh : MenuHandlePtr;
font : ARRAY OF CHAR;
height : CARDINAL;
styles : FontStyleSet) : BOOLEAN;
(* 'InitMenu' initialisiert eine MenuHandle-Struktur, die der Benutzer *)
(* zurückbekommt. 'window' spezifiziert das Fenster in dem das Menu *)
(* dargestellt werden soll. Die anderen Größen entsprechen denen aus *)
(* 'SetMenuFont'. Um Topaz 8 zu öffnen, können die Konstanten 'stdFont' *)
(* und 'stdHeight' benutzt werden. Wenn der angegebene Font nicht *)
(* gefunden werden konnte, wird Topaz 8 benutzt. *)
PROCEDURE InitMenu(window : WindowPtr;
standardFont : ARRAY OF CHAR;
height : CARDINAL;
styles : FontStyleSet) : MenuHandlePtr;
(* 'AddMenu' fügt ein Menupunkt in der Titelleiste hinzu. 'enable' *)
(* bestimmt, ob der komplette Menupunkt (auch seine Items) anwählbar *)
(* sind (TRUE) oder nicht (FALSE). Hierzu können auch die Konstanten *)
(* 'enabled' und 'disabled' benutzt werden. *)
PROCEDURE AddMenu(mh : MenuHandlePtr;
name : ARRAY OF CHAR;
enable : BOOLEAN);
(* 'SetDefaultHeight' setzt den Zwischenraum zwischen zwei Items fest. *)
(* Dieser wird in Punkten angegeben. (Voreingestellt : 2 Punkte) *)
PROCEDURE SetDefaultHeight(mh : MenuHandlePtr;
height : INTEGER);
(* 'SetDefaultAdditionalWidth' legt die zusätzliche Breite der Menu- *)
(* punkte in der Titelleiste, der Items und Subitems fest. Diese kann *)
(* nur für ein (Sub)Menu komplett aktiv sein. Es gilt der Wert bei *)
(* Begin eines neuen Menu(punkte)s. (Voreingestellt : 24 Punkte) *)
PROCEDURE SetDefaultAdditionalWidth(mh : MenuHandlePtr;
add : INTEGER);
(* Mit 'SetXOffset' kann man die Items noch zusätzlich horizontal ver- *)
(* schieben, wobei allerdings darauf geachtet werden muß, daß das Item *)
(* (auch nicht teilweise) außerhalb der Menutafel gerät! Es können hier *)
(* die Konstanten 'standart' und 'center' benutzt werden. 'standart' *)
(* setzt die Voreinstellung (0 Punkte) und 'center' zentriert den Text *)
(* zwischen der Breite des 'AdditionalWidth'. *)
PROCEDURE SetXOffset(mh : MenuHandlePtr;
offset : INTEGER);
(* 'SetDefaultYSpace' gibt an wieviel Punkte zwischen zwei MenuItems *)
(* noch zusätzlich frei bleiben sollen. (Voreinstellung : 2 Punkte) *)
PROCEDURE SetDefaultYSpace(mh : MenuHandlePtr;
space : INTEGER);
(* 'SetDefaultXSpace' gibt an wieviel Punkte bei Start einer neuen *)
(* Spalte noch zusätzlich freigemacht werden sollen. (Voreinstellung : *)
(* 0 Punkte) *)
PROCEDURE SetDefaultXSpace(mh : MenuHandlePtr;
space : INTEGER);
(* 'StartMutualExclude' markiert den Anfang eines Mutual-Exclude *)
(* Bereiches. Von Mutual-Exclude (Gegenseitiger Ausschluß) spricht man, *)
(* wenn bei einer Einschaltung eines Toggle Schalters, bestimmte andere *)
(* Schalter damit gleichzeitig ausgeschaltet werden, so daß in einem *)
(* bestimmten Bereich nur ein eingeschalteter Schalter existieren kann. *)
(* Wenn mehrere 'checkit'-Menuitems so gesetzt werden sollen, daß immer *)
(* nur einer von ihnen angewählt seien kann, sollten diese Befehle *)
(* benutzt werden. Man könnte sich zum Beispiel eine Farbauswahl denken *)
(* von der natürlich immer nur eine Farbe selektiert sein kann. *)
PROCEDURE StartMutualExclude(mh : MenuHandlePtr);
(* 'PauseMutualExclude' pausiert das Mutual-Exclude-Verfahren für die *)
(* nächsten Items, bis 'EndPauseMutualExclude' aufgerufen wird. *)
PROCEDURE PauseMutualExclude(mh : MenuHandlePtr);
(* 'EndPauseMutualExclude' beendet ein Aussetzen des Mutual-Excludes *)
(* durch den Befehl 'PauseMutualExclude' *)
PROCEDURE EndPauseMutualExclude(mh : MenuHandlePtr);
(* 'EndMutualExclude' markiert das Ende des Mutual-Exclude Bereichs. *)
PROCEDURE EndMutualExclude(mh : MenuHandlePtr);
(* 'AddTextMenuItem' fügt ein MenuItem zu dem aktuellen Menu hinzu. *)
(* Im Menu erscheint der Text 'text'. Während der Mauspfeil sich *)
(* über dem Item befindet wird der Text 'sel' angezeigt. Nur wenn 'sel' *)
(* 'none' ist, wird auf andere Modis wie z.B. 'box' oder 'invert' in *)
(* 'flags' geprüft. 'cut' ist ein Shortcut für das MenuItem. Wenn 'cut' *)
(* gleich 'none' ist, wird kein Shortcut angegeben. *)
PROCEDURE AddTextMenuItem(mh : MenuHandlePtr;
text : ARRAY OF CHAR;
sel : ARRAY OF CHAR;
cut : CHAR;
flags : ItemFlagSet);
(* 'AddBarMenuItem' fügt einen Balken in die MenuItems ein, der nicht *)
(* anwählbar ist und eine Strukturierung des Menuaufbaus ermöglichen *)
(* soll. Die Breite des Balkens wird automatisch angepaßt. *)
PROCEDURE AddBarMenuItem(mh : MenuHandlePtr);
(* 'AddImageMenuItem' ist mit 'AddTextMenuItem' vergleichbar, nur wird *)
(* hier ein Image in den Menuaufbau mit hereingenommen. Um hier kein *)
(* zweites Image anzuzeigen, wenn sich der Mauspfeil über dem Item *)
(* befindet, muß 'sel' auf 'noImage' (bzw. NIL) gesetzt werden. *)
PROCEDURE AddImageMenuItem(mh : MenuHandlePtr;
image : ImagePtr;
sel : ImagePtr;
cut : CHAR;
flags : ItemFlagSet);
(* Für 'AddTextSubItem' gilt das gleiche wie für 'AddTextItem' nur wird *)
(* stattdessen ein weiterer Untermenupunkt erzeugt. *)
PROCEDURE AddTextSubItem(mh : MenuHandlePtr;
text : ARRAY OF CHAR;
sel : ARRAY OF CHAR;
cut : CHAR;
flags : ItemFlagSet);
(* Für 'AddBarSubItem' gilt das gleiche, daß unter 'AddBarMenuItem' *)
(* gesagt wurde. *)
PROCEDURE AddBarSubItem(mh : MenuHandlePtr);
(* 'AddImageSubItem' entspricht 'AddImageItem' nur wird ein Submenu *)
(* angehängt. *)
PROCEDURE AddImageSubItem(mh : MenuHandlePtr;
image : ImagePtr;
sel : ImagePtr;
cut : CHAR;
flags : ItemFlagSet);
(* 'StartNewColomn' fängt eine neue Spalte an. So ist es möglich *)
(* mehrere Menüpunkte auch nebeneinander aufzubauen. *)
PROCEDURE StartNewColumn(mh : MenuHandlePtr);
(* 'InstallMenu' installiert das erzeugte Menu in dem in 'InitMenu' *)
(* festgelegten Window. Wenn es erfolgreich verlief, wird TRUE zurück- *)
(* gegeben, ansonsten FALSE. *)
PROCEDURE InstallMenu(mh : MenuHandlePtr) : BOOLEAN;
(* 'FreeMenu' entfernt ein Menu von dem Window und gibt alle belegten *)
(* Strukturen wieder frei. *)
PROCEDURE FreeMenu(VAR mh : MenuHandlePtr);
(* 'MenuItemChecked' fragt ab, ob ein bestimmtes (Sub)MenuItem *)
(* angeschaltet ist. Dieses ist natürlich nur mit den 'checkit' bzw. *)
(* 'checkset' Items möglich. Es wird TRUE zurückgegeben, wenn das *)
(* Item angeschaltet ist, also mit einem Häkchen markiert ist. *)
PROCEDURE MenuItemChecked(mh : MenuHandlePtr;
menuNr,itemNr,subItemNr : INTEGER) : BOOLEAN;
(* 'MenuEnable' kann ein ganzes Menu ein- bzw. ausschalten. Nach *)
(* Abschalten des Menus kann kein (Sub)Item des Menus mehr angewählt *)
(* werden. Wenn 'enable' 'enabled' (TRUE) ist wird das Menu einge- *)
(* schaltet, bei 'disabled' (FALSE) ausgeschaltet. *)
PROCEDURE MenuEnable(mh : MenuHandlePtr;
menuNr : INTEGER;
enable : BOOLEAN);
(* Für 'MenuItemEnable' gilt das gleiche, wie unter 'MenuEnable' gesagt *)
(* nur betrifft es hier nur ein einzelnes Item. *)
PROCEDURE MenuItemEnable(mh : MenuHandlePtr;
menuNr,itemNr,subNr : INTEGER;
enable : BOOLEAN);
(* 'ModifyMenu' verändert nachträglich die Daten eines Menupunktes. Es *)
(* werden die gleichen Parameter wie bei 'AddMenu' übergeben. Es ist *)
(* darauf zu achten, daß der neue Name nicht länger ist als der alte!!! *)
PROCEDURE ModifyMenu(mh : MenuHandlePtr;
menuNr : INTEGER;
name : ARRAY OF CHAR;
enable : BOOLEAN);
(* 'ModifyTextItem' benutzt die gleichen Parameter wie 'AddTextItem'. *)
(* Es werden nachträglich Daten des Menupunktes geändert. Es ist darauf *)
(* zu achten, daß die neuen Texte nicht länger sind als die alten!!! *)
PROCEDURE ModifyTextItem(mh : MenuHandlePtr;
menuNr,itemNr,subNr : INTEGER;
text : ARRAY OF CHAR;
sel : ARRAY OF CHAR;
flags : ItemFlagSet);
(* 'ModifyImageItem' benutzt die gleichen Parameter wie 'AddImageItem'. *)
(* Es werden nachträglich die Daten des Items geändert. Es ist darauf *)
(* zu achten, daß die neuen Images nicht größer sind als die neuen bzw. *)
(* einen anderen Typ besitzen (Images-ColorImages)!!!! *)
PROCEDURE ModifyImageItem(mh : MenuHandlePtr;
menuNr,itemNr,subNr : INTEGER;
image : ImagePtr;
sel : ImagePtr;
flags : ItemFlagSet);
(* 'WaitForPossibleAction' setzt den Task solange in den Wartezustand *)
(* bis das System eine Nachricht sendet. Es wird ein 'MessageType' *)
(* zurückgegeben, worin vermerkt ist, um welche Art von Nachricht es *)
(* sich handelt. Zusätzlich wird in 'idcmp' der genaue Auslöser fest- *)
(* gehalten. Nach diesem Befehl kann die Nachricht entweder durch *)
(* den Befehl 'GetMenuSelection', 'GetGadgetSelection' oder *)
(* 'GetIntuiMessage' ausgelesen werden. *)
PROCEDURE WaitForPossibleAction(win : WindowPtr;
VAR idcmp : IDCMPFlagSet) : MessageType;
(* 'GetMenuSelection besorgt sich die Nummer des Items das ausgewählt *)
(* wurde. Wenn kein Menu angewählt wurde, wird in allen Nummern- *)
(* Variablen eine -1 zurückgegeben. Wenn es sich um ein normales Item *)
(* handelt, wird in 'subNr' eine 15 zurückgegeben! *)
PROCEDURE GetMenuSelection(win : WindowPtr;
VAR menuNr,itemNr,subNr : INTEGER);
(* 'GetIDGadget' besorgt den Zeiger auf die Gadgetstruktur bei Angabe *)
(* der ID-Nummer. *)
PROCEDURE GetIDGadget(gh : GadgetHandlePtr;
id : INTEGER) : GadgetsPtr;
(* 'GetGadgetStructure' berechnet den standart GadgetPtr aus dem *)
(* intern benutzten 'GadgetsPtr'. So können theoretisch auch Ver- *)
(* änderungen von Hand vorgenommen werden, was allerdings nicht zu *)
(* empfehlen ist, um die Gadget-Routinen nicht durcheinanderzubringen. *)
PROCEDURE GetGadgetStructure(g : GadgetsPtr) : GadgetPtr;
(* 'SetDefaultGadgetFont' setzt den in 'InitGadgetList' vereinbarten *)
(* Standartfont, als Font für den Text des nächsten Gadgets (nur *)
(* Boolean-Gadgets!). *)
PROCEDURE SetDefaultGadgetFont(gh : GadgetHandlePtr);
(* 'SetGadgetFont' setzt einen neuen Font für den Text eines folgenden *)
(* Boolean-Gadgets. *)
PROCEDURE SetGadgetFont(gh : MenuHandlePtr;
font : ARRAY OF CHAR;
height : CARDINAL;
styles : FontStyleSet) : BOOLEAN;
(* 'InitGadgetList' initialisiert eine Liste, in der Gadgets *)
(* eingetragen werden können. Normalerweise genügt eine Liste für ein *)
(* Window/Requester vollkommen, nur wenn bestimmte Abgrenzungen von *)
(* Gadgetgruppen erreicht werden sollen, sollten mehrere Gadgetlisten *)
(* pro Window/Requester eingesetzt werden. Wie bei 'InitMenu' muß ein *)
(* Standartfont angegeben werden, der normalerweise bei den Boolean- *)
(* Gadgets eingesetzt wird. Bei Einbindung von Gadgets sofort bei der *)
(* Öffnung eines Requesters muß die Gadgetliste mit 'window' und *)
(* 'requester' gleich NIL initialisiert werden und kann dann in *)
(* 'GetRequester' eingesetzt werden. *)
PROCEDURE InitGadgetList(window : WindowPtr;
requester : RequesterPtr;
standardFont : ARRAY OF CHAR;
height : CARDINAL;
styles : FontStyleSet) : GadgetHandlePtr;
(* 'AddBorderBoolGadget' fügt dem Window/Requester ein Booleangadget *)
(* an der Position 'x','y' mit der Breite 'w' und der Höhe 'h' hinzu. *)
(* Jedes Gadget in der Liste MUß eine andere ID-Nummer zur Unter- *)
(* scheidung besitzen (in 'id'). Bei Bedarf wird ein Border (Rahmen) *)
(* um das Gadget gezogen, und ebenfalls bei Bedarf noch weitere bei *)
(* Anwahl des Gadgets. Diese müssen in 'b1' bzw. 'b2' eingetragen *)
(* werden. Wenn keine Rahmen gewünscht sind, müssen in dem jeweiligen *)
(* Feld 'noImage' (NIL) eingetragen werden. Es wird ein Text in das *)
(* Gadget geschrieben mit 'c1' als APen, 'c2' als BPen. Der Text 'txt' *)
(* wird passent zu den in 'mode' angegebenen Drawmodes gezeichnet. *)
(* Soll kein Text ausgegeben werden, sollte 'mode' auf 'jam1' gesetzt *)
(* werden und 'none in 'txt' übergeben werden. Das Gadget ist noch *)
(* nicht sofort sichtbar, sondern erst der Einsatz von 'DisplayGadget' *)
(* oder 'DisplayAllGadgets' wird das Gadget sichtbar. *)
PROCEDURE AddBorderBoolGadget(gh : GadgetHandlePtr;
x,y : INTEGER;
w,h : INTEGER;
id : INTEGER;
b1,b2 : BorderPtr;
flags : BoolGadgetFlagSet;
mode : DrawModeSet;
c1,c2 : SHORTCARD;
txt : ARRAY OF CHAR) : GadgetsPtr;
(* 'AddImageBoolGadget' verhält sich wie 'AddBorderBoolGadget', nur *)
(* wird hier statt Borders Images auf den Bildschirm gebracht. *)
PROCEDURE AddImageBoolGadget(gh : GadgetHandlePtr;
x,y : INTEGER;
w,h : INTEGER;
id : INTEGER;
i1,i2 : ImagePtr;
flags : BoolGadgetFlagSet;
mode : DrawModeSet;
c1,c2 : SHORTCARD;
txt : ARRAY OF CHAR) : GadgetsPtr;
(* 'AddBoolGadgetMask' ermöglicht es eine Anwahlmaske für Boolean- *)
(* Gadgets zu erzeugen. Dieses wird z.B. benötigt um ein Boolean- *)
(* Gadget in Form eines Stopschildes zu generieren. Das Gadget kann *)
(* nur dort angewählt werden, wo in der Maske Bits gesetzt sind. *)
(* Die Maske ist eine Bitplane mit der Größe des Gadgets. Sie kann *)
(* z.B. in einer ASSEMBLE-Prozedur abgelegt werden. *)
PROCEDURE AddBoolGadgetMask(g : GadgetsPtr;
mask : ADDRESS);
(* 'AddPropGadget' fügt ein Proportionalgadget dem Window/Requester *)
(* an. Die Parameter 'x' bis 'id' entsprechen den 'Add..BoolGadget' *)
(* Funktionen. 'im1' und 'im2' stellen Images dar, die den Knopf in *)
(* unaktiviertem und aktiviertem Zustand darstellen. Wenn hier *)
(* 'noImage' (NIL) angegeben wird, wird der Standartknopf von Intuition *)
(* benutzt (ein ausgefülltes Rechteck). Die letzten Werte geben die *)
(* Auflösung des Reglers an. 'xr' und 'yr' geben die maximalen Elemente *)
(* des Reglers an. Wenn bei einem der beiden 0 angegeben wird, ist *)
(* eine Verschiebung des Reglers in die jeweilige Richtung nicht *)
(* möglich. 'xd' und 'yd' sind die Elemente die dargestellt werden *)
(* können und 'xp' und 'yp' die Position des Knopfes bei Öffnung des *)
(* Reglers. Die Positionen können im Bereich von 0..x/yr-1 liegen. *)
(* Um die Belegung der Werte etwas zu veranschaulichen, folgt hier ein *)
(* Beispiel. Man möchte für einen File-Requester ein Schieberegler *)
(* einsetzen mit dem man zwischen den Positionen herrollen kann. *)
(* Auf dem Bildschirm finden 11 Filenamen untereinander Platz. Im *)
(* Moment befinden sich im Speicher 108 Filenamen die dargestellt *)
(* werden können. Die Auflösung in Y-Richtung beträgt also 'yr':= *)
(* 108-11; die Darstellung beträgt 'yd':=11; und die Position 'yp' kann *)
(* im Bereich von 0..(108-11-1) liegen. Für einen Farbregler für die *)
(* Werte von 0..15 müßte also z.B. 'xr':=16; 'xd':=1; und 'xp':=0..15 *)
(* sein, für einen horizontalen Regler. *)
PROCEDURE AddPropGadget(gh : GadgetHandlePtr;
x,y : INTEGER;
w,h : INTEGER;
id : INTEGER;
im1,im2 : ImagePtr;
flags : PropGadgetFlagSet;
xr,yr : CARDINAL;
xd,yd : CARDINAL;
xp,yp : CARDINAL) : GadgetsPtr;
(* 'AddStringGadget' fügt ein Stringgadget in das Window/Requester *)
(* ein. Die Parameter 'x' bis 'id' entsprechen wieder den Parametern *)
(* in den Funktionen 'Add...BoolGadget'. 'b' enthält, wenn gewünscht, *)
(* einen Border für das jeweilige Stringgadget. 'max' gibt die maximale *)
(* Anzahl Zeichen im Puffer fest. 'dp' steht für DisplayPosition und *)
(* legt das Zeichen fest, daß als erstes im Puffer zu sehen ist. Dieses *)
(* kann bei Strings benutzt werden, bei denen die Texte länger als das *)
(* Gadget ist. 'bp' ist die BufferPosition und legt fest auf welcher *)
(* Position sich der Cursor befindet. In 'keyMap' kann eine alternative *)
(* Tastaturbelegung übergeben werden. Wenn die Standartkeymap benutzt *)
(* werden soll, muß hier NIL angegeben werden. 'text' wird im Buffer *)
(* bei der Aktivierung angezeigt. Wenn kein Text gewünscht ist, kann *)
(* in 'text' 'none' übergeben werden. In 'li' kann man für Longint- *)
(* Stringgadgets einen Vorgabewert setzen. *)
PROCEDURE AddStringGadget(gh : GadgetHandlePtr;
x,y : INTEGER;
w,h : INTEGER;
id : INTEGER;
b : BorderPtr;
max : INTEGER;
dp,bp : INTEGER;
flags : StringGadgetFlagSet;
keyMap : KeyMapPtr;
text : ARRAY OF CHAR;
li : LONGINT) : GadgetsPtr;
(* 'DisplayGadget' zeigt ein Gadget, das mittels einer der Funktionen *)
(* 'Add...Gadget' erzeugt wurde, in dem in 'InitGadgetList' angegebenen *)
(* Fenster/Requester an. *)
PROCEDURE DisplayGadget(g : GadgetsPtr);
(* 'DisplayAllGadgets' arbeitet wie 'DisplayGadget', nur werden alle *)
(* Gadgets in der Liste angezeigt. *)
PROCEDURE DisplayAllGadgets(gh : GadgetHandlePtr);
(* 'GadgetEnable' erlaubt es Gadgets anwählbar bzw. nicht anwählbar *)
(* zu schalten. Wenn 'enable' 'enabled' (TRUE) ist, kann man das Gadget *)
(* anwählen, bei 'diabled' (FALSE) kann man es nicht. *)
PROCEDURE GadgetEnable(g : GadgetsPtr;
enable : BOOLEAN);
(* 'ActivateStringGadget' ermöglicht es dem Programmierer ein *)
(* bestimmtes Stringgadgets so zu aktivieren, daß der Benutzer, ohne *)
(* daß er erst das Gadget mit der Maus anwählen muß, gleich drauflos- *)
(* schreiben kann. *)
PROCEDURE ActivateStringGadget(gh : GadgetHandlePtr;
g : GadgetsPtr);
(* 'GetGadgetSelection' ermittelt die Anwahl bzw. das Loslassen des *)
(* Gadgets. Wenn ein Gadget gedrückt wurde, wird TRUE zurückgegeben, *)
(* ansonsten FALSE. *)
PROCEDURE GetGadgetSelection(win : WindowPtr;
VAR id : INTEGER) : BOOLEAN;
(* 'GetPropPosition' besorgt sich von einem Proportionalgadget die *)
(* aktuelle Schieberposition. Diese können wie bei 'AddPropGadget' in *)
(* dem Bereich 0..x/yr-1 liegen, welche bei der Erzeugung angegeben *)
(* wurden. *)
PROCEDURE GetPropPosition(g : GadgetsPtr;
VAR xp,yp : CARDINAL);
(* 'SetPropGadget' ermöglicht es nachträglich ein Proportionalgadget *)
(* zu verändern. Es können alle Schieberwerte genauso wie bei *)
(* 'AddPropGadget' angegeben werden. Das Gadget wird optisch sofort *)
(* erneuert. *)
PROCEDURE SetPropGadget(g : GadgetsPtr;
xr,yr : CARDINAL;
xd,yd : CARDINAL;
xp,yp : CARDINAL);
(* 'GetStringContents' liest den Buffer eines Stringgadgets aus. Wenn *)
(* es sich um ein Longint-Stringgadget handelt, enthält 'li' den *)
(* aktuellen LONGINT-Wert seit der letzten Bestätigung mit <RETURN>. *)
PROCEDURE GetStringContents(g : GadgetsPtr;
VAR str : ARRAY OF CHAR;
VAR li : LONGINT);
(* 'FreeGadget' entfernt ein Gadget von dem Window/Requester und gibt *)
(* alle belegten Strukturen wieder frei. *)
PROCEDURE FreeGadget(gh : GadgetHandlePtr;
VAR g : GadgetsPtr);
(* 'FreeGadgetList' gibt alle Gadgets einer Liste frei und dann die *)
(* Liste. Alle Gadgets werden entfernt und der ganze belegte Speicher *)
(* wird wieder freigegeben. *)
PROCEDURE FreeGadgetList(VAR gh : GadgetHandlePtr);
(* 'GetRequester' legt ein Requester in ein Window. 'x','y','w' und *)
(* 'h' geben die Position und Größen des Requesters im Window dar. *)
(* 'border' enthält einen Border zur Umrandung des Requesters. 'text' *)
(* ist ein Zeiger auf eine (verkettete) IntuiTextStruktur. 'bitMap' *)
(* kann angegeben werden, wenn der Requester eine vorbereitete BitMap *)
(* benutzen soll, ansonsten muß NIL angegeben werden. 'fill' gibt eine *)
(* Hintergrundfarbe des Requesters an. Bei relativen DM-Requester muß *)
(* beachtet werden, daß der Requester nur in dem jeweiligen Window *)
(* erscheint, je nach Mausposition. Das Window bewegt sich NICHT! *)
(* In 'gh' kann man schon sofort bei Erstellung des Requesters eine *)
(* Gadgetliste übergeben, die in den Requester eingebunden werden soll. *)
(* Dazu muß in 'InitGadgetList' die Parameter 'window' und 'requester' *)
(* auf NIL gesetzt werden! Andere Listen werden nicht angenommen! *)
(* Dieses hat einige Vorteile gegenüber dem nachträglichen Einbinden *)
(* und sollte wenn immer möglich benutzt werden! *)
PROCEDURE GetRequester(window : WindowPtr;
x,y : INTEGER;
w,h : INTEGER;
border : BorderPtr;
text : IntuiTextPtr;
gh : GadgetHandlePtr;
bitMap : BitMapPtr;
flags : RequestFlagSet;
fill : SHORTCARD) : RequesterPtr;
(* 'GetReqRastPort' besorgt den Zeiger auf den RastPort des Requesters.*)
(* So kann man direkt (ohne Intuition) den Requester mit den Zeichen- *)
(* befehlen aus Graphics bzw. GraphicsSupport beschreiben. *)
(* Allerdings muß man sich DoubleMenu-Requestern vorsehen : Wenn der *)
(* Requester sich momentan nicht bzw. noch nicht auf dem Bildschirm *)
(* befindet, existiert kein Rastport und es wird NIL zurückgegeben. *)
(* Es muß vor Zeichenoperationen also geprüft werden, ob der zurück- *)
(* gegebene Zeiger nicht Null (NIL) ist!!! *)
PROCEDURE GetReqRastPort(req : RequesterPtr) : RastPortPtr;
(* 'EndDMRequester' beendet einen DM-Requester und löscht ihn vom *)
(* Bildschirm. Er ist dann für einen weiteren Aufruf durch einen *)
(* Doppelklick auf die Menuauswahltaste bereit. Erst ein Aufruf von *)
(* 'FreeRequester' entfernt ihn endgültig. *)
PROCEDURE EndDMRequester(req : RequesterPtr);
(* 'FreeRequester' entfernt ein mittels 'GetRequester' erzeugter *)
(* Requester vom Window und gibt alle Structuren frei. *)
PROCEDURE FreeRequester(VAR req : RequesterPtr);
(* 'GetIntuiMessage' liest eine allgemeine Intuitionnachricht aus. *)
(* Wenn eine Nachricht ausgelesen werden konnte, wird TRUE zurück- *)
(* gegeben, ansonsten FALSE. *)
PROCEDURE GetIntuiMessage(window : WindowPtr;
VAR msg : IntuiMessage) : BOOLEAN;
(* 'GetActiveWindow' besorgt den Zeiger auf die Windowstruktur des *)
(* momentan aktiven Windows. Dieser Befehl sollte nicht dazu benutzt *)
(* werden, um Änderungen oder ähnliches an fremden Fenstern auszuführen!*)
(* Die Benutzung dieses Befehls zur Manipulation verstößt gegen die *)
(* Programmierrichtlinien von Commodore. (z.B. Verstoß in der MMU) *)
(* Es kann nähmlich passieren, daß das aktive Fenster noch während *)
(* der Zeiger abgearbeitet wird, von einem anderen Task geschlossen *)
(* wird und der Zeiger auf einen freien Speicherbereich zeigt! *)
PROCEDURE GetActiveWindow() : WindowPtr;
(* Für 'GetActiveScreen' gilt das gleiche das unter 'GetActiveWindow' *)
(* gesagt wurde. *)
PROCEDURE GetActiveScreen() : ScreenPtr;
END IntuitionSupport.